package com.prepared.leetCode;

/**
 * leetcode problem 832:
 *
 * Given a binary matrix A, we want to flip the image horizontally, then invert it, and return the resulting image.
 *
 * To flip an image horizontally means that each row of the image is reversed.  For example, flipping [1, 1, 0] horizontally results in [0, 1, 1].
 *
 * To invert an image means that each 0 is replaced by 1, and each 1 is replaced by 0. For example, inverting [0, 1, 1] results in [1, 0, 0].
 *
 * Input: [[1,1,0],[1,0,1],[0,0,0]]
 * Output: [[1,0,0],[0,1,0],[1,1,1]]
 * Explanation: First reverse each row: [[0,1,1],[1,0,1],[0,0,0]].
 * Then, invert the image: [[1,0,0],[0,1,0],[1,1,1]]
 */
public class Day02FlippingAnImage832 {

    public int[][] flipAndInvertImage(int[][] A) {
        //0-1，1-0
        for(int i = 0; i < A.length; i++) {
            for(int j = 0; j < A.length; j++) {
                A[i][j] = Math.abs(A[i][j] - 1);
            }
        }
        // reverse
        int temp = 0;
        int num = A.length%2==0?A.length/2:(A.length/2+1);
        for(int i = 0; i < A.length; i++) {
            for(int j = 0; j < num; j++) {
                temp = A[i][j];
                A[i][j] = A[i][A.length - j -1];
                A[i][A.length - j -1] = temp;
            }
        }
        return A;
    }
}
